﻿YUI.add('editar-periodo-view', function (Y) {
    'use strict';
    Y.EditarPeriodo = Y.Base.create('EditarPeriodo', Y.View, [], {
        templateIsCharged: false,
        loadTemplate: function () {
            if (this.template == '') {
                var that = this,
                validator = null,
                request = Y.io('/ExcellentProject/scripts/views/calificaciones/periodos/templates/editarPeriodo.html', {
                    on: {
                        complete: function (id, response) {
                            that.templateIsCharged = true;
                            that.template = response.responseText;
                            try {
                                $('#table_id').parent().replaceWith('');
                            }
                            catch (err) {
                                console.log(err);
                            }
                            that.render();
                        }
                    },
                    failure: function (id, response) {
                        alert(response)
                    }
                })
            }
        },
        events: {
            '.guardar': {
                click: 'guardarPeriodo'
            },

            '#agregarParcial': {
                click: 'agregarParcialAPeriodo'
            }
        },

        render: function () {
            this.loadTemplate();
            if (this.templateIsCharged) {
                var contentTemplate = Y.Handlebars.compile(this.template);
                this.get('container').setHTML(contentTemplate(this.get('model').getAttrs()));

                if (this.get('model').get('Id') != 0) {
                    var statusListSelected = Y.one('#estado');
                    statusListSelected.set('value', this.get('model').get('Estado'));

                }

                $('#inputNombre').alphanum();
                $('#inputDescripcion').alphanum();

                //carga de parciales
                var parciales = new Y.Parciales();
                var that = this, idPeriodoActual = this.get('model').get('Id'),
                    a = parciales.load({ urlName: 'parcialPorIdPeriodo', idPeriodo: this.get('model').get('Id') }, function () {

                        var table = $('#table_id').DataTable({
                            "language": {
                                "search": "Buscar:",
                                "lengthMenu": "Items por página: _MENU_",
                                "info": "Items del _START_ al _END_ de _TOTAL_ items.",
                                "emptyTable": "Items no disponibles.",
                                "infoEmpty": "0 ítems.",
                                "paginate": {
                                    "next": "Siguiente",
                                    "previous": "Anterior",
                                    "first": "Primero",
                                    "last": "Ultimo"
                                }
                            },
                            "paging": true,
                            retrieve: true,
                            data: parciales._items,
                            "rowCallback": function (row, aData) {
                                $('td:eq(5)', row).html('<a title="Editar" class="btn btn-warning" href="/parciales/' + idPeriodoActual + '/' + aData.get('Id') + '">' +
                                '<i class="fa fa-pencil">' + '</i>' + '<span class="tooltip"></span></a>');
                                $('td:eq(6)', row).html('<a title="Eliminar" class="btn btn-danger" href="/parciales/eliminar/' + idPeriodoActual + '/' + aData.get('Id') + '" >' +
                              '<i class="fa fa-trash-o">' + '</i>' + '<span class="tooltip"></span></a>');
                            },
                            columns: [
                                { data: '_state.data.Nombre.lazy.value' },
                                { data: '_state.data.Descripcion.lazy.value' },
                                { data: '_state.data.FechaInicio.lazy.value' },
                                { data: '_state.data.FechaFin.lazy.value' },
                                { data: '_state.data.Estado.lazy.value' },
                                { data: '_state.data.Id.lazy.value' },
                                { data: '_state.data.Id.lazy.value' }
                            ]
                        });
                        table.draw();
                    });

            }
        },
        agregarParcialAPeriodo: function (ev) {
            ev.preventDefault();

            var model = this.get('model');
            //Si es un nuevo modelo se desactiva el boton agregar de parciales y se invalida el grupo parciales
            if (model.get('Id') == 0 || undefined == model.get('Id')) {

                

                Y.one('#parciales').toggleClass('has-success');
                Y.one('#parciales').toggleClass('has-warning', true);
                // Y.one('#agregarParcial').set('disabled', true);

                bootbox.dialog({
                    message: "<h5>Grabe el período antes de editar los parciales.</h5>",
                    title: "Problemas de Validación",
                    show: true,
                    backdrop: true,
                    closeButton: true,
                    animate: true,

                    className: "my-modal",
                    buttons: {
                        success: {
                            label: "Ok",
                            className: "btn btn-warning",
                            callback: function () {
                            }
                        }
                    }
                });
                return;
            }
            else {
                Y.one('#parciales').toggleClass('has-warning');
                Y.one('#parciales').toggleClass('has-success', true);

                Y.one('#navigateParcial').set('href', '/parciales/' + model.get('Id') + '/0')

                Y.one('#navigateParcial').simulate("click");


            }
        },
        guardarPeriodo: function (ev) {
            var model = this.get('model');

            var requiredMessages = '';

            //validacion de campos requeridos
            if (Y.one('#inputNombre').get('value') == '') {
                Y.one('#nombreGroup').removeClass('has-success')
                Y.one('#nombreGroup').toggleClass('has-error', true)
                requiredMessages = ' - Nombre requerido. <br/>';

            } else {
                Y.one('#nombreGroup').removeClass('has-error')
                Y.one('#nombreGroup').toggleClass('has-success', true)
            }

            if (Y.one('#inputDescripcion').get('value') == '') {
                Y.one('#descripcionGroup').toggleClass('has-success')
                Y.one('#descripcionGroup').toggleClass('has-error', true)
                requiredMessages += ' - Descripción requerida. <br/>';

            } else {
                Y.one('#descripcionGroup').removeClass('has-error')
                Y.one('#descripcionGroup').toggleClass('has-success', true)
            }

            if (Y.one('#fechainicio').get('value') == '' ||
                Y.one('#fechafin').get('value') == '' ||
                Y.one('#estado').get('value') == '') {
                Y.one('#fechas').removeClass('has-success')
                Y.one('#fechas').toggleClass('has-error', true)
                requiredMessages += ' - Las Fechas y estado del período son obligatorias.<br/>';
            } else {
                Y.one('#fechas').removeClass('has-error')
                Y.one('#fechas').toggleClass('has-success', true)
            }

            //Validacion de fechas
            var splitedDate = Y.one('#inputFechaInicio').get('value').split('-');
            var startDate = new Date(parseInt(splitedDate[0]), parseInt(splitedDate[1]), parseInt(splitedDate[2]));
            splitedDate = Y.one('#inputFechaFin').get('value').split('-');
            var endDate = new Date(parseInt(splitedDate[0]), parseInt(splitedDate[1]), parseInt(splitedDate[2]));

            if (startDate.getTime() >= endDate.getTime()) {
                Y.one('#fechas').removeClass('has-success')
                Y.one('#fechas').toggleClass('has-error', true)
                requiredMessages += ' - Rango de fechas inválido. La fecha de inicio debe ser menor que la fecha de fin del período.';
            }
            else {
                Y.one('#fechas').removeClass('has-error')
                Y.one('#fechas').toggleClass('has-success', true)
            }


            if (requiredMessages != '') {
                bootbox.dialog({
                    message: requiredMessages,
                    title: "Problemas de Validación",
                    show: true,
                    backdrop: true,
                    closeButton: true,
                    animate: true,

                    className: "my-modal",
                    buttons: {
                        success: {
                            label: "Ok",
                            className: "btn btn-info",

                            callback: function () { }
                        }
                    }
                });
                return;
            }



            model.setAttrs({
                Id: Y.one('#id').get('value'),
                Nombre: Y.one('#inputNombre').get('value'),
                Descripcion: Y.one('#inputDescripcion').get('value').trim(),
                FechaInicio: Y.one('#inputFechaInicio').get('value').trim(),
                FechaFin: Y.one('#inputFechaFin').get('value').trim(),
                Estado: Y.one('#estado').get('value').trim()
            });
            var options = null;
            if (model.get('Id') != 0)
                options = { action: 'update', idPer: model.get('Id') };
            else {
                options = { urlName: 'saveOption' };
                model.set('Id', 0)
            }
            var that = this, a = model.save(options, function (err, response) {
                if (err != null)
                    bootbox.dialog({
                        message: Y.JSON.parse(response.response).ExceptionMessage,
                        title: "Problemas al registrar el período",
                        show: true,
                        backdrop: true,
                        closeButton: true,
                        animate: true,

                        className: "my-modal",
                        buttons: {
                            success: {
                                label: "Ok",
                                className: "btn btn-danger",
                                callback: function () { }
                            }
                        }
                    });
                else {

                    bootbox.dialog({
                        message: "<h5>Período grabado</h5>",
                        title: "Confirmación",
                        show: true,
                        backdrop: true,
                        closeButton: true,
                        animate: true,

                        className: "my-modal",
                        buttons: {
                            success: {
                                label: "Ok",
                                className: "btn btn-success",

                                callback: function () { }
                            }
                        }
                    });
                }
            });


        }
    })

}, '0.0.0.1', { requires: ['view', 'handlebars', 'handlebars-select-helper', 'node', 'parcial-model-list', 'parcial-model', 'event', 'node-event-simulate'] })